HCIP-IoT Developer认证——物联网基础

一、物联网概述

物联网简介

物联网(Internet of Things)概念最早于1999年由美国MIT提出,早期的物联网是指依托RFID(Radio Frequency Identification)技术和设备,按约定的通信协议与互联网结合,使物品信息实现智能化识别和管理,实现物品信息互联、可交换和共享而形成的网络。

物联网是新一代信息技术的重要组成部分,也是“信息化”时代的重要发展阶段。物联网通过智能感知、识别技术与普适计算等通信感知技术,广泛应用于网络的融合中,也因此被称为继计算机、互联网之后世界信息产业发展的第三次浪潮。

通过二维码识读设备、射频识别(RFID)装置、红外感应装置、全球定位系统和激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的一种网络。 ——国际电信联盟(ITU)

物联网就是物物相连的互联网,这其中有两层意思:其一,物联网的核心和基础仍然是互联网,是在互联网的基础上的延伸和扩展的网络;其二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,也就是物物相息。 ——百度百科

主流物联网接入技术应用场景划分

接入技术 特点 业务应用
4G/5G/LTE-V 传输速率>10Mbps,功耗较高 车联网、视频监控、智能机器等
eMTC/GPRS 传输速率<1Mbps,成本较低,功耗较低 穿戴、车辆调度、电子广告、无线ATM等
NB-IoT 传输速率<100Kbps,成本低,功耗低,覆盖广 远程抄表、公共事业、农林渔牧、数据采集等

物联网层次架构

物联网的层次架构可以分为(信息收集和信号处理)、(IoT 边缘)、(接入和传输网络)、(解决数据如何存储、检索、使用、业务规划、安全、维护、费用等)、行业应用(数据呈现及客户交互);也可分为感知层、网络层、平台层和应用层。

物联网产业发展面临的主要挑战

  1. 新业务上线周期长(应用碎片化,开发周期长,产品上市慢)
  2. 终端/传感器厂家众多导致集成困难
  3. 网络联接复杂

二、华为IoT联接管理平台——Oceanconnect

华为IoT联接平台概述

发展物联网业务需要一个终端接入解耦平台与应用分离(能力开放)安全可靠的平台作为支撑;华为IoT联接管理平台Oceanconnect具有终端接入、安全验证、业务编排、数据管理、多协议通信的功能,能实现连接管理和能力开放,并完成与运营商管道和平台对接。

Oceanconnect产品架构

  1. 华为“IoT全栈”解决方案(1+2+1):一个统一的物联网平台、两种网络接入方式、一个统一的操作系统。
  2. 典型组网:应用使能平台服务(AEP)、通用应用使能服务(CAES)、车联网服务(Vehicle)、数据分析服务(DAS)、设备管理服务(DMP)、云平台服务(CSP)、设备接入和能力开放等。
  3. 功能架构:终端层(提供标准IoT Agent,能够快速适配OS和各类厂商的智能终端)、接入层(包括接入网络和接入协议,通过IoT Agent适配不同厂商的传感器,以便于接入海量设备)、设备连接层(主要提供统一的接入能力、资产和设备管理、SIM卡连接管理等功能)、设备管理层及业务使能层(提供API开放网关、数据管理、规则引擎等功能)、应用层(支持多种Open API形式,支持预集成多个行业应用,主要包括智慧园区、车联网、智慧城市和第三方应用)。

Oceanconnect业务与功能

  1. 设备管理

  2. 设备(网关)通信管理

    设备登录:即网关的接入登录。

    数据通信:即网关到Oceanconnect间的数据通信管理(基于MQTT连接),Oceanconnect和终端的数据通信路径的建立和维护,实现连接状态变化的感知,IoT平台与网关间数据的交换。

    设备订阅:即用户数据到网关的连接管理,网关通过到Oceanconnect的订阅,实现网关对用户(SP用户/最终用户)数据的监控,用户对终端下发的命令实时通过IoT平台转发给网关。

    用户订阅:即网关数据到用户的连接管理,用户通过到IoT平台的订阅,实现用户对网关的监控,网关实时上报的数据通过Oceanconnect转发给用户。

    用户订阅

  3. 设备接入鉴权

    创建传感器鉴权:当有新的传感器接入时,网关携带平台分配的合法会话信息创建传感器,IoT平台对其他合法性进行检查,检查通过后,将新的传感器加入到网关下面,以便进行传感器的数据上报功能。

    设备接入鉴权:网关启动后,设备携带Device ID和密码接入Oceanconnect,Oceanconnect对其鉴权确认合法性,如果合法则返回200 OK,携带为其分配的合法性会话信息,设备完成登录。

    上报数据鉴权:当传感器通过网关上报数据时,网关携带IoT平台分配的合法信息上报传感器数据,IoT平台对其合法性进行检查,检查通过后,将传感器数据记录在IoT平台并上报给最终用户。

  4. 规则引擎:使用对象是终端用户,可以定位处理各种事件,利用规则引擎可以完成异常事件的及时通知和快速处理,帮助用户维护和监控设备,保证系统业务的及时恢复。

  5. 数据转发

  6. 数据转发

  7. API开放管理

  8. 多租户管理

  9. Portal管理

Oceanconnect产品特点

  1. 接入无关:任意方式连接、任意设备连接;
  2. 可靠性:系统可靠性、网络可靠性、业务可靠性、模块可靠性;
  3. 安全性:业务安全、平台安全、接入安全、传感器安全;
  4. 能力开放:平台向上API开放、平台向下Agent开放、预集成高价值行业、终端管理平台开放;
  5. 弹性伸缩

Oceanconnect关键特性

  1. 设备接入:提供支持设备接入平台的能力,支持多种协议接入及多宗接入方式

    IoT平台通过引入CIG(Cloud Inter-Networking Gateway,云端接入网关),解决不同类型、不同通信协议的设备接入IoT平台的问题。CIG通过将各种不同的南向协议发送的消息转换为平台可以识别的Json格式。除CIG之外,直连设备还可以通过集成Agent Lite(瘦网关)快速接入平台,实现数据上报和命令下发等功能。

    目前IoT平台支持使用以下原生协议接入:

    • LWM2M over CoAP原生协议接入:主要面向基于蜂窝的窄带物联网(NB-IoT)场景下物联网应用,具有覆盖广、连接多、速率低、成本低、功耗低等特点。

    • MQTT/MQTTS原生协议接入:主要应用于计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备。

  2. 应用集成:提供行业应用接入平台的能力,通过API实现平台能力开放

    应用注册鉴权:SP用户基于华为的IoT平台开发物联网应用,首先需要再IoT平台的管理门户上,根据自身行业应用的特征申请平台资源,获取注册鉴权信息(包括应用ID、应用密钥),确保每个SP用户合法的接入到平台,合法的享用平台资源,高效地利用平台提供的服务套件进行应用开发。

    订阅通知:行业应用通过API接口向IoT平台进行订阅,告知IoT平台行业应用需要收到收到的通知类型,比如绑定设备,设备数据变化,升级状态变化等。当平台中设备的相关信息有更新时,平台会通过HTTP/HTTPS协议向应用侧推送消息。

    在推送场景下,IoT平台是客户端,应用服务器是服务端,IoT平台调用应用服务器的接口,并向服务端,IoT平台调用应用服务器的接口,并向应用服务器推送消息。此时,如果订阅的回调地址为HTTPS地址,则需要再物联网上传CA证书,CA证书由应用服务器侧提供。

    北向Restful API:当前IoT平台对外提供了应用安全接入、设备管理、批量处理、订阅管理、命令下发、数据采集、设备组管理、设备升级等开放API。

  3. 设备管理:提供平台对设备和设备数据的操作管理能力

    设备发放,即设备注册,指SP用户通过管理门户或通过调用注册设备API在IoT平台中注册设备信息,平台中存在设备信息后,再接入真实的实体设备,这样平台与终端实体设备可以实现连接和通信。

    设备接入鉴权,是指IoT平台对接入平台的设备进行鉴权认证,鉴权内容包括设备接入信息的完整性和安全性、设备与平台消息传输完整性和安全性。

    设备访问授权,IoT平台支持应用间的授权操作,包括同一个SP用户下的不同应用之间授权、不同SP用户下的不同应用之间授权。被授权的应用可以通过管理门户查看和操作授权应用下的所有设备。

    设备数据采集,IoT平台提供设备数据采集功能,支持对设备数据的订阅,应用向IoT平台进行设备数据订阅,当设备上报数据时,平台会向应用推送消息;支持查看设备上报的历史数据,可通过管理门户或者调用API查看设备的历史数据。

    设备影子,IoT平台支持创建设备的“影子”,用于存储设备上报的最新数据(report区)和应用对设备属性的最新配置数据(desired区)。

    • report区

      当IoT平台获取到设备真实数据时,会将真实数据同步到设备影子的report区;当设备不在线时,可以通过设备影子获取最新数据。

    • desired区

      设备在线时,设备影子的desired区数据会即时同步到设备;设备不在线时,设备影子的desired区数据会在设备上线后同步到设备。

    仅LWM2M协议设备支持设备影子功能。

    仅支持修改LWM2M协议定义的属性信息,用户自定义的设备属性信息暂不支持修改。

    命令下发,IoT平台提供两种命令下发机制:

    • 立即下发:IoT平台立即发送收到的命令,如果设备不在线则下发失败;
    • 缓存下发:IoT平台收到命令后放入队列,在设备上线的时候,平台依次下发命令队列中的命令。

    设备远程诊断,IoT平台支持用户对接入平台的设备(当前仅支持NB-IoT设备)进行远程维护操作:

    • 日志收集:系统通过日志管理服务对用户操作和系统运行痕迹进行记录,有助于迅速定位问题及快速恢复故障,使运维工程师更精确、更高效地进行设备日常维护。
    • 远程重启:当需要对设备或者模组进行重启操作时,可通过管理门户,选择需要重启的设备或者模组进行重新操作。

    设备升级策略管理,IoT平台支持对软件和固件升级的相关策略管理:

    • 升级时间策略管理:用户在进行升级操作时,可以灵活的设置软件和固件升级的时间,提前根据设备和业务的间隙期选择升级时间;
    • 升级并发数控制:IoT平台支持根据设备无线信号覆盖情况对升级并发数进行控制,IoT平台将设备无线覆盖等级分为3个等级(0、1和2),并预置每个等级的无线覆盖强度(RSRP)门限值和信噪比(SINR)门限值,根据无线信号的覆盖强度,进行设备升级。

    设备固件升级及设备软件升级

    • 设备固件升级(FOTA)是通过OTA(Over the Air)的方式对设备的模组进行升级,基于LWM2M标准协议实现。
    • 设备软件升级(SOTA)是通过OTA的方式对终端设备的MCU进行升级,基于华为定义的PCP升级协议实现。
  4. NB-IoT云网协同:通过与核心网网元对接,实现对NB-IoT设备的优化控制

    DTLS+:DTLS+(Datagram Transport Layer Security,数据报传输层安全性协议)是华为IoT平台采用的数据报传输层安全协议,相比传统DTLS协议,在会话协商等方面做了优化,减少了NB-IoT设备与IoT平台通信过程中的握手次数,从而延长终端电池的使用寿命。

    NB-IoT设备省电模式

    • PSM:最省电的模式,设备非业务期间深度休眠,不接收下行数据,只有设备主动发送上行数据时可接收IoT平台缓存的下行数据,适合对下行数据无时延要求的业务;

    • DRX:不连续接收模式,最耗电的模式,在每个DRX周期,设备都会检测一次是否有下行业务到达,适用于对时延有高要求的业务,设备一般采取供电的方式;

    • eDRX:扩展不连续接收模式,设备兼顾低功耗和对时延有一定要求的业务,在每个eDRX周期内,只有在设置的寻呼时间窗口内,终端可接收下行数据,其余时间终端处于休眠状态,不接收下行数据。

    NB-IoT上行拥塞控制:当有大量NB-IoT设备同时上线时,容易造成网络拥塞。IoT平台通过NB-IoT上行离散控制功能,统一为设备分配上线时间,让设备可以错峰接入,提高设备上线率。

    NB-IoT下行拥塞控制:NB-IoT基站的空口寻呼能力资源有限,当需要为重要业务预留资源或者网络即将发生拥塞时,IoT平台针对立即下发及缓存下发两种请求,实时下行拥塞控制,减少从IoT平台或应用下发到网络侧的寻呼数,从而实现网络拥塞控制目标。

    • 针对立即下发的下行消息,如果基站小区寻呼并发数超过小区阈值时,则直接拒绝该请求,减少下发的下行消息数量。
    • 针对缓存下发的下行消息,如果基站小区寻呼并发数超过小区阈值时,则排队等待,延迟下行消息的下发时间。
  5. 第三方系统集成:提供与第三方系统的对接能力

    短信系统对接和邮件系统对接:IoT平台支持与现网的短信系统(或邮件系统)通过SMPP协议(邮件系统为SMTP协议)进行对接,以便用户在IoT平台上进行相关业务操作(如SP账号的注册、密码找回等)时,可以将信息通过短信(或邮件)的形式发送给用户。

  6. 运营运维:通过管理门户提供对平台的运营操作管理

    审计日志:用户在使用IoT平台的过程中,系统会以日志形式收集并记录用户及平台的操作结果,当某项功能发生异常时,用户可以根据日志的记录信息定位并处理故障问题。

    • 操作日志:记录用户和系统所做的操作和结果,如导出配置、删除配置等,用于跟踪和审计。
    • 安全日志:记录涉及系统安全操作信息,如创建用户登录、用户确认隐私声明等,用户了解系统安全操作相关信息,及时发现潜在的安全隐患并进行处理。
    • 个人数据查询日志:记录用户对账户进行的操作和结果,如查询用户详情、查询登录历史、查询全局用户列表等,用于跟踪和安全审计。
    • 业务日志:记录涉及平台业务的操作及结果,例如创建设备、南向设备登录等,用于跟踪南北向业务相关信息,及时发现问题并处理。

三、华为Oceanconnect端到端开发

本章内容包含从NB终端设备到应用服务完整的开发流程,包括IoT平台北向接口调用机制和方法,数据上报和命令下发的流程和规范,设备描述文件和编码插件的开发流程,以及NB终端设备与平台的联通机制。IoT云平台作为一个联接管理平台,不但连通了终端设备和北向应用服务的数据通道,而且规范了数据交互流程和格式,保证了数据服务的完整性和可扩展性。

整体方案介绍

上行消息:解析CoAP报文得到应用层数据→调用设备厂商profile和插件解码→消息送达应用平台

下行消息:下发消息→调用设备厂商提供的profile和编解码插件编码→组装CoAP消息发送到设备

北向业务服务开发

  1. 北向接入机制:REST(Representational State Transfer,简称REST)描述了一个架构样式的网络系统,即指的是一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是RESTful。
  2. 北向API:应用安全接入、设备管理、批量处理、订阅管理、消息推送、命令下发、数据采集、设备组管理、设备升级

设备Profile描述文件

设备的Profile文件是用来描述设备类型和设备服务能力的文件,它定义了设备具备的服务能力,每个服务具备的属性、命令以及命令的参数。

  1. 设备能力(Device Capability)描述一款设备的能力特征,包括设备类型、厂商、型号、协议类型以及提供的服务类型。
  2. 服务(Service)描述设备具备的服务能力,每个服务具备的属性、命令以及命令的参数。

编解码插件开发

通过图形化的方式实现设备的二进制码流到IoT平台的Json格式消息的转化,同时将平台下发的控制命令编解成设备的二进制码流格式。

  1. 上行消息处理流程

    • 南向设备(UE)通过采集数据,并将数据按自定义规则进行编码;
    • 南向设备通过串口,以及AT命令的形式,发送已经编码的数据到NB-IoT模组;
    • NB-IoT芯片/模组,接收到AT命令后,自动封装为CoAP协议的消息,并发送给事先配置好的华为物联网平台;
    • 华为物联网平台收到数据后,自动解析CoAP协议包,根据设备Profile文件,找到匹配的编解码插件,对Payload进行解析,解析为与设备Profile中描述的Service匹配的Json数据,并保存于平台之上;
    • 应用服务器(APP Server)通过北向数据查询接口(RESTful)获取平台上的数据;同时也可以提前调用订阅接口,对数据变化进行订阅,则之后所有的数据变化,平台都会通过POST消息,发送到指定的服务器。
  2. 下行消息处理流程

    • IoT平台应用服务器(APP Server)创建信令(命令的相关项需要和设备Profile中的描述一致),发送到IoT平台;
    • 收到之后,会先判断设备是否在线,如果在线,则立即下发信令,如果平台判断设备离线,则信令将缓存于平台的数据库中;
    • 南向设备(UE)在某个时刻上报数据,平台收到数据后,将检索对应设备在数据库中是否存在有效未下发的信令(即缓存信令),如有,则下发该信令;
    • 信令通过编解码插件进行编码(Json到二进制码流),并被发送到设备端(UE);
    • 南向设备(UE)收到信令,执行完毕,返回信令执行结果,IoT平台收到上述执行结果,通过编解码插件的解析,获取信令执行的结果,修改对应的信令状态,并将南向设备(UE)收到的信息上报到应用服务器(APP Server)上。
  3. Decode接口和Encode接口

    Decode接口的入参binaryData为设备发过来的CoAP报文的Payload部分,设备的上行报文可以分为设备数据上报、设备对平台命令的应答两种情况,在这两种情况下解码输出的字段不同;Encode接口的入参是Json格式数据,是平台下发的消息或应答,平台的下行报文可以分为平台命令下发、平台对设备上报数据的相应两种情况。

南向设备对接

  1. 业务发放流程

    • 应用服务器用过申请的APP ID/密码登录Oceanconnect平台;
    • 应用服务器进行设备开户,设置IoT设备的关键标识到平台侧,为IoT设备开户;
    • IoCM把IoT设备的信息存入MongoDB。

    必须先为IoT设备在Oceanconnect平台中开户,否则设备是非法的,不能接入到平台中来。

  2. 南向注册流程

    • IoT设备上电、连网后,带着设备的关键词标识到Oceanconnect发起注册,Oceanconnect发现应用服务器已经为设备开户,注册成功;
    • IoT设备根据鉴权算法计算出鉴权码,用鉴权码去Oceanconnect平台鉴权;
    • IoCM在MongoDB更新IoT设备状态信息;
    • IoCM通知IoT应用服务器设备已经上线。

    注册只需要执行一次,注册成功后就不需要注册了;但为了数据安全,鉴权需要执行多次,一般IoT设备主动跟平台发消息是需要先鉴权。

  3. 南向消息上报流程

    • 当IoT设备发现满足消息上报条件时,主动发消息给Oceanconnect平台;
    • 根据收到的消息,IoCM判断是否需要存入数据库,如果需要存入数据库,则把消息保存到MongoDB中;
    • 根据收到的消息,IoCM判断是否需要上报给应用服务器,如果需要,则把消息转发给应用服务器。

    不同IoT设备消息上报机制不同,有的是周期性上报,每隔一段时间上报一次消息,有的是事件性上报,检测到某些事件时发消息通知平台。

  4. 控制命令下发流程

    • 应用服务器主动向IoT设备下发控制命令,Oceanconnect平台把命令转发给IoT终端;
    • IoT设备收到命令后,执行控制命令的内容,并判断是否需要回复命令,如果需要,则回复命令;
    • 根据收到的命令,IoCM判断是否需要上报给应用服务器,如果需要,则把命令转发给应用服务器。

    为了省电,很多IoT设备不是一直在线的,比如水表、电表等,这类设备的控制命令往往不是实时转发的,Oceanconnect收到这类控制命令后,会把命令存储起来,等到IoT设备主动跟平台发命令时,再把控制命令转发下去。

四、NB-IoT标准及解决方案

NB-IoT(窄带蜂窝物联网)产业正在迅速崛起,这项技术在有效提供深度市内覆盖的同时,可以支持大量的低吞吐率、超低成本设备连接,并具有低功耗、优化的网络架构等独特优势。

NB-IoT物理层设计

  1. 系统带宽:180kHz;
  2. 下行技术:正交频分多址(OFDMA),子载波间隔达15kHz,共12个子载波;
  3. 上行技术:单载波频分多址(SC-FDMA)。
  • OFDMA(正交频分多址):OFDMA是OFDM技术的演进,将OFDM和FDMA技术结合,再利用OFDM对信道进行子载波化后,在部分子载波上加载传输数据的传输技术。
  • OFDMA是一种多址接入调制技术,用户通过OFDMA共享频带资源,接入系统。
  • OFDMA又分为子信道OFDMA和调频OFDMA。

NB-IoT物理信道与物理信号

为了减少实现的复杂性,NB-IoT精简了不必要的物理信道,在下行只有三种物理信道(窄带物理广播信道NPBCH、窄带物理下行控制信道NPDCCH、窄带物理下行共享信道NPDSCH)和两种参考信号(窄带参考信号NRS、窄带同步信号NSS),在上行只有两种物理信道(窄带物理上行共享信道NPUSCH、窄带物理随机接入信道NPRACH)和一种参考信号(窄带参考信号NDMRS)。总之,NB-IoT的物理信道通过降低目标速率、多次传输低阶调制方式等措施,以达到增加覆盖、降低成本、降低功耗的目的。

NB-IoT部署方式

NB-IoT构建于蜂窝网络,可采取带内、保护带或独立载波等三种部署方式,与现有网络共存,支持SingleRAN的平滑演进。其只消耗大约180kHz的频段,可直接部署于GSM网络、UMTS网络或LTE网络,以降低部署成本、实现平滑升级。

NB-IoT支持的三种部署方式:独立部署(Stand-alone)、保护带部署(Guard-band)、带内部署(Inband)。

  • 独立部署模式:利用单独的频带,适合用于GSM频段的重耕;
  • 保护带部署模式:利用LTE系统中边缘无用频带;
  • 带内模式:利用LTE载波重点的任何资源块。

NB-IoT关键特性

  1. 超强覆盖:最大耦合损耗MCL比GPRS/LTE增加20dB;提升功率谱密度、重复发送;
  2. 超低成本:180kHz窄带宽,基带复杂度低;低采样率;单天线,半双工,RF成本低;峰均比低,功效效率高;协议栈简化;
  3. 超低功耗:PSM、eDRX;
  4. 超大连接:上行业务调度单元小、减小空口信令开销、PSM/eDRX降低了每个设备的资源使用量、基站优化、核心网优化。

五、华为NB-IoT芯片与模组

华为Boudica芯片概述

华为Boudica芯片拥有三个CPU,分别为安全核(S核,负责启动A、C核,拥有擦除和写内置flash的权限)、协议核(C核,主要包含NB-IoT及LWIP协议)、应用核(A核,主要负责AT指令解析、外置flash读写以及其他上层应用、协议等),三核之间采用共享内存的方式实现核内通信。

华为Boudica芯片研发阶段可靠性试验总体可以分为四大类,包括环境适应性试验、可靠性极限测试、长期可靠性测试、小批量可靠性测试。

六、CoAP协议技术原理

CoAP协议概述

CoAP是受限制的应用协议(Constrained Application Protocol)的简称。在当前由PC机组成的世界,信息交换是通过TCP和应用层协议HTTP实现的,但对于小型设备而言,实现TCP和HTTP协议显然是一个过分的要求,为了让小设备可以接入互联网,CoAP协议被设计出来。CoAP协议是一种应用层协议,它运行于UDP协议之上而不是像HTTP那样运行于TCP之上。CoAP协议非常小巧,最小的数据包仅为4字节。

应用层协议有CoAP、MQTT(消息队列遥测传输协议)、XMPP(可扩展消息处理现场协议)、HTTP等,物联网主流使用的是CoAP协议和MQTT协议。

CoAP协议特点

  1. CoAP协议基于UDP;
  2. 采用异步消息交换;
  3. CoAP协议是二进制格式的,HTTP是文本格式的,CoAP比HTTP更加紧凑;
  4. 轻量化,CoAP最小长度仅4个字节;
  5. 支持可靠传输,数据重传,块传输,确保数据可靠到达;
  6. 支持URI和Content-Type;
  7. 能实现简单的数据缓存和代理;无状态的HTTP映射,可以构建代理服务器,使构建代理服务器,使CoAP资源可以用HTTP访问,也可以使HTTP接口实现于CoAP协议之上;
  8. 支持DTLS;
  9. CoAP基于REST,服务器的资源地址和互联网一样也有类似URI的格式,客户端同样有POST,GET,PUT,DELETE方法来访问server,但是想对HTTP简化实现降低复杂度(代码更小,封包更小)。

RESTful架构

REST是一种设计风格而不是标准,如果一个架构符合REST原则,我们就称它为RESTful架构,REST就是表现层状态转化,其中表现层其实指的是资源的表现层,即资源在网络中某种形式进行状态转移。

CoAP协议报文结构

字段 名称 描述
Ver 2bits 版本编号 指示CoAP协议的版本号,类似于HTTP1.0和HTTP1.1,版本编号占2位。
T 2bits 报文类型 CoAP协议定义了4种不同形式的报文,包括CON,NON,ACK,RST。
TKL 4bits Token length Token长度。
Code 8bits 表现形式 Code在CoAP请求报文和相应报文中具有不同的表现形式。
Message ID 16bits 报文编号 用于重复消息检测、匹配消息类型等。每个CoAP报文都有一个ID,在一次会话中ID总是保持不变,但是在这个会话结束之后,该ID会被回收利用。
Token 标识具体内容 ID的另一种表现,通过TKL制定Token长度。
Options 报文选项 通过报文选项可设定CoAP主机,CoAP URI,CoAP请求参数和负载媒体类型等。
1111 1111 8bits 分隔符 CoAP报文和具体负载之间的分隔符,固定一个字节。
Payload 交互数据 真正有用的被交互的数据。

CoAP协议逻辑分层

CoAP协议逻辑上分两层:资源请求/响应层(Request/Response)和消息层(Messages)。Messages层只负责控制端到端的报文交互;Request/Response层负责传输资源操作的请求和响应。

CoAP Messages模型

  1. Reliability Mode(可靠消息传播):主要通过确认及重传机制来实现的,客户端发送消息后,需要等待服务器收到通知,如果在规定时间内,没有收到需要重新发送数据。可靠传输是基于CON消息传输的,服务器端收到CON类型的消息后,需要返回ACK消息,客户端在指定时间ACK_TIMEOUT内收到ACK消息后,才代表这个消息已发送到服务器端。
  2. Non-Reliability Mode(非可靠消息传播):客户端只管发送消息,不管服务器端有没有收到,因此可能存在丢包。非可靠消息传播是基于NON消息传输的,服务器端收到NON类型消息后,不用回复ACK消息。

CoAP Messages分类

字段类型 作用 描述
CON消息 需要确认的消息 Receipt方必须对消息回复ACK消息或者Reset。
NON消息 不需要确认的消息 Receipt方可能回复Reset。
ACK消息 用于向客户端确认CON消息已收到 可以携带同步可靠响应模式Piggybacked Response。
RST消息 用于回复收到的无法处理的消息 可通过一个Empty Message触发一个Reset,用于Endpoint的保活检测。

协议定义的Message的种类,由报文中的2bits的【T】字段确认具体类型;

Empty Message是一个既不是Request也不是Response的Message。

CoAP Message的可靠传输

  1. CON和ACK/Reset Message中携带Message ID用于配对是一次可靠传输过程,支持重复检测。
  2. 简单的停等基于指数回退的重传机制保证可靠性:客户端构造CON消息发送到服务器端,未收到ACK或Reset Message时,支持基于指数回退的重传机制;服务器端如果可以处理该消息,返回ACK,否则返回Reset。
  3. Message的可靠传输由一个CON消息发起。
  4. CON消息总是承载一个Request或Response,除非是一个为了触发Reset Message的Empty Message。
  5. Receipt收到一个CON消息,处理结果是回复一个ACK消息(携带匹配的Message ID)或者在某些情况(Receipt不能正确处理消息、Message是一个Empty Message、Message存在格式错误)下Rejecting一个消息。
  6. Rejecting一个消息的结果是回复Reset Message或者忽略它。

CoAP Message的非可靠传输

NON消息中仍然携带Message ID用于重复检测:客户端对于不需要可靠传输的Message通过NON消息传递;虽然不需要ACK确认NON消息,服务器端仍然可能会返回Reset给客户端(比如服务器端不能处理这个NON消息)。

CoAP Request/Response模型

CoAP Request和Response的语法通过Message承载(同样有可靠传输和非可靠传输),其中可靠传输Request和Response的响应方式有两种:同步可靠响应模式(Piggybacked Response)、异步可靠响应模式(Separate Response)。

  1. CoAP Request/Response可靠响应模式:同步可靠响应模式(Piggybacked Response)中Request和Response通过Token配对;异步可靠响应模式(Separate Response)中跨多对消息的Request和Response通过Token配对。

  2. CoAP Request/Response非可靠响应模式:Request和Response通过Token配对;对于通过NON承载的Request和Response,服务器端可以选择通过CON返回Response。

七、MQTT协议技术原理

MQTT协议概述

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)构建于TCP/IP协议之上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下二设计的发布/订阅型“轻量级”通讯协议。MQTT协议可以在严重受限的设备硬件和高延迟/带宽有限的网络上实现,其灵活性使得为IoT设备和服务的多样化应用场景提供支持成为可能。

MQTT协议特点

  1. 使用发布(Publish)/订阅(Subscribe)消息模式,提供了一对多的消息发布和应用之间的解耦。
  2. 消息传输不需要知道负载内容。
  3. 提供三种等级的质量服务。
  4. 很小的传输消耗和协议数据交换,最大限度减少网络流量。
  5. 异常连接断开发生时,能通知到相关各方。

MQTT的发布/订阅模式

  1. 客户端(包括发布者和订阅者)连接到代理服务器(是任何发布/订阅协议的核心),以订阅代理中的任何消息主题。
  2. 客户端通过将消息和主题发送给代理,发布某个主题范围内的消息。
  3. 代理然后通过将消息转发给所有订阅该主题的客户端。
  4. 发布/订阅解耦(空间解耦、时间解耦、同步解耦)了消息的发布者和接受者。

MQTT在主题通配符

(1)、单级(只能用于单个主题层级匹配的通配符):+

(2)、多级(用于匹配主题中任意层级的通配符,放在末尾且前面必须加反斜杠):#

MQTT服务质量(QoS)

服务质量(QoS)级别一种关于发送者和接受者之间信息投递的保证协议。MQTT中有三种QoS级别:QoS 0(最多分发一次;消息的分发依赖于底层网络的能力,接受者不会发送响应,发送者也不会重试,消息可能送达一次也看根本没送达)、QoS 1(至少分发一次;服务质量确保消息至少送达一次,QoS 1的发布报文的可变报头中包含一个报文标识符,需要PUBACK报文确认)、QoS 2(仅分发一次;最高等的服务质量,消息丢失和重复都是不可接受的,使用这个服务质量登记会有额外的开销)。

MQTT控制报文结构

MQTT控制报文结构:在MQTT协议中,一个MQTT数据包由:固定头(Fixed header,所有控制报文都包含)、可变头(Variable header,部分控制报文包含)、消息体(payload,部分控制报文包含)三部分构成。

MQTT连接

MQTT连接是在客户端和代理服务器之间,连接是通过客户端向代理服务器发送连接消息(CONNECT)发起的,代理服务器会响应一个CONNACK消息和状态码,一旦连接建立,只要客户端不发送断开连接的命令或失去联系,代理服务器将保持连接。

MQTT保留消息

保留消息是一条将保留标志(retained flag)置为true的普通MQTT消息。代理服务器会针对主题依照QoS级别保留最后一条保留消息。保留消息存在的意义是为了订阅者能够立即受到消息而无需等待发布者发布下一条消息。一个主题的保留消息是最新的可知的有效数据,它不必是最新的数据,但它一定是将保留标志置为true的最新消息。

MQTT遗嘱LWT

MQTT使用遗嘱LWT功能通知其他客户端某个客户端意外断开了连接,每个客户端都可以在连接代理服务器是指定其最新的遗嘱(一个具备主题,保留标志,QoS的普通MQTT消息)。代理服务器会在以下情况下分发遗嘱消息:代理服务器发现一个I/O错误或者网络错误、客户端没有按时发送心跳包、客户端没有在断开连接前发送DISCONNECT包、代理服务器因为协议错误而断开连接。

MQTT心跳包

为了应对半开连接问题,MQTT提供了心跳(keep alive)机制。

  1. MQTT客户端向代理服务器发起CONNECT请求时,通过KeepAlive参数设置保活周期。

  2. 客户端在无报文发送时,按KeepAlive周期定时发送2字节的PINGREQ心跳报文,代理服务器收到PINGREQ心跳报文后,回复2字节的PINGRESP报文。

  3. 代理服务器在1.5个心跳周期内,既没有收到客户端发布订阅报文,也没有收到PINGREQ心跳报文时,主动心跳超时断开客户端TCP连接并且发送遗嘱消息(前提是客户端已经指定了遗嘱)。
  4. 客户端可以在任何时间发送PINGREQ来确认网络连接是有效的,PINGREQ不包含任何消息体(payload)。

八、NB-IoT模组常用AT指令

NB-IoT芯片的常用AT指令

NB-IoT芯片的AT指令可以分为测试指令(AT+=?)、查询指令(AT+?)、有参数的执行指令(AT+=<…>)和无参数的执行指令(AT+)。

NB-IoT 3GPP相关指令

  1. AT+CGSN 查询模块序列号IMEI号;
  2. AT+CEREG 查询网络注册状态;
  3. AT+CSCON 查询终端与基站连接状态;
  4. AT+CGPADDR 显示PDP地址;
  5. AT+CMEE 报告终端错误;
  6. AT+CFUN 设置模块射频功能;
  7. AT+NRB 重启模块;
  8. AT+CSQ 查询模块信号强度;
  9. AT+CGATT 查询网络激活状态;

九、物联网操作系统概述

RTOS概述

RTOS(Real-time operating system,实时操作系统)是管理系统硬件和软件资源的系统软件,以方便开发者使用,操作系统管理的资源包括处理器、存储器、外设、文件系统等等。实时操作系统最大的特色就是“实时性”,即如果有任务需要执行,实时操作系统会在短时间内执行该任务,保证了任务在指定时间内完成。实时操作系统根据任务执行的实时性,可以分为“软实时”操作系统和“硬实时”操作系统,“硬实时”操作系统比“软实时”操作系统响应更快、实时性更高,“硬实时”操作系统大多应用于工业领域,“硬实时”操作系统必须使任务在确定的时间内完成,“软实时”操作系统能让绝大多数任务在确定的时间内完成。Huawei LiteOS是一款“软实时”操作系统。

RTOS的优势

  1. 降低开发难度,直接使用系统API,即可完成系统资源的申请、多任务的配合(基于优先级的实时抢占调度,同优先级的时间片调度),以及任务间的通信等(如锁、事件等机制)。
  2. 增加代码可读性,易于维护和管理。
  3. 提升可移植性,对接不同芯片的工作由操作系统完成,应用开发者只需要关注OS层接口。

十、Huawei LiteOS基础框架

Huawei LiteOS Kernel概述

Huawei LiteOS基础内核是最精简的Huawei LiteOS操作系统代码,包括任务管理、内存管理、时间管理、通信机制、中断管理、事件管理、定时器等操作系统基础组件,可以单独运行。

Huawei LiteOS Kernel的优势

  1. 高实时性,高稳定性;
  2. 超小内核,基础内核体积可以裁剪至不到10KB;
  3. 低功耗;
  4. 支持功能静态裁剪。

Huawei LiteOS低功耗设计

  1. 调度机制:集中式任务调度机制;

  2. 传输机制:轻量级网络协议栈、路由算法改进、Sleeping Router。

Huawei LiteOS安全设计

  1. 内核层:SafeArea(使得进程之间相互隔离;保护密钥、证书等敏感数据,只能通过保护API访问)、区分用户态和内核态(限制应用对硬件和资源的访问)、安全加载(对可信应用核非可信应用采取不同的加载和资源分配机制);
  2. 传输层:基于TLS/DTLS的加密传输;
  3. 应用层:可信应用签名、API认证。

Huawei LiteOS Kernel概述

Huawei LiteOS Kernel基本框架包括内存(动态内存和静态内存)、时间管理(系统时间、软件定时器和Tick)、IPC通信(消息队列和事件)、硬件相关(中断、异常和硬件定时器)、任务(任务调度)及任务同步(互斥锁和信号量)。

Huawei LiteOS Kernel任务模块—任务概述

  1. 从系统的角度看,任务是竞争系统资源的最小运行单位,任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其他任务运行。
  2. Huawei LiteOS中的任务是抢占式调度机制,同时支持时间片轮转调度机制。
  3. 高优先级的任务可以打断低优先级任务,低优先级的任务必须在高优先级任务阻塞或结束后才能得到调度。
  4. Huawei LiteOS的任务一共有32个优先级,最高优先级为0,最低优先级为31。

Huawei LiteOS Kernel任务模块—任务状态

  1. 就绪态(Ready):该任务在就绪列表中,就绪的任务已经具备执行的能力,只需等待调度器进行调度,新创建的任务会初始化为就绪态;
  2. 运行态(Running):该状态表明任务正在执行,此时它占用处理器,LiteOS调度器选择运行的永远是处于最高优先级的就绪态任务,当任务被运行的一刻,它的任务状态就变成了运行态;
  3. 阻塞态(Blocked):如果当任务当前正在等待某个时序或外部中断,则该任务处于阻塞状态,该任务不在就绪列表中。包含任务被挂起、任务被延时、任务正在等待信号量、读写队列或者等待读写事件等。
  4. 退出态(Dead):该任务运行结束,等待系统回收资源。
  5. 就绪态→运行态:任务创建后进入就绪态,发生任务切换时,就绪列表中最高优先级的任务被执行,从而进入运行态,但此刻该任务依旧在就绪列表中。
  6. 运行态→阻塞态:正在运行的任务发生阻塞(挂起、延时、读信号量等待)时,该任务就会从就绪列表中删除,任务状态由运行态变成阻塞态,然后发生任务切换,运行就绪列表中剩余最高优先级任务。
  7. 阻塞态→就绪态(阻塞态→运行态):阻塞态的任务被恢复后(任务恢复、延时时间超时、读信号量超时或读到信号量等),此时被恢复的任务会被加入就绪列表,从而由阻塞态变成就绪态;此时如果被恢复任务的优先级高于正在运行任务的优先级,则会发生任务切换,讲该任务由就绪态变成运行态。
  8. 就绪态→阻塞态:任务也有可能在就绪态时被阻塞(挂起),此时任务状态会由就绪态转变为阻塞态,该任务从就绪列表中删除,不会参与任务调度,直到该任务被恢复。
  9. 运行态→就绪态:有更高优先级任务创建或者恢复后,会发生任务调度,此刻就绪列表中最高优先级任务会变为运行态,那么原先运行的任务由运行态变为就绪态,依然在就绪列表中。
  10. 运行态→退出态:运行中的任务运行结束,任务状态由运行态转变为退出态,退出态包含任务运行结束的正常退出以及impossible状态。
  11. 阻塞态→退出态:阻塞的任务调用删除接口,任务状态由阻塞态转变为退出态。

Huawei LiteOS Kernel内存模块—内存概述

  1. 内存管理模块系统的内存资源,是操作系统的核心模块之一。主要包括内存的初始化、分配以及释放。

  2. 在系统运行过程中,内存管理模块通过对内存的申请/释放操作,来管理用户和OS对内存的使用,使内存的利用率和使用效率达到最优,同时最大限度地解决系统的内存碎片问题。

  3. Huawei LiteOS的内存管理分为静态内存和动态内存管理,提供内存初始化、分配、释放等功能。

  4. 动态内存:在动态内存池中分配用户指定大小的内存块。

    优点:按需分配;

    缺点:内存池中可能出现碎片。

  5. 静态内存:在静态内存池中分配用户初始化时预设(固定)大小的内存块。

    优点:分配和释放效率高,静态内存池中无碎片;

    缺点:只能申请到初始化预设大小的内存块,不能按需申请。

Huawei LiteOS Kernel硬件相关模块—中断概述

  1. 中断是指出现需要时,CPU暂停执行当前程序,转而执行新程序的过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的事务,此时,CPU暂时中止当前程序的执行转而处理这个事务,这个过程就叫做中断。
  2. 通过中断机制,在外设不需要CPU介入时,CPU可以执行其他任务,而当外设需要CPU时通过产生中断信号使CPU立即中断当前任务来响应中断请求。这样可以使CPU避免把大量时间耗费在等待,查询外设状态的操作上,因此将大大提高系统实时性以及执行效率。
  3. Huawei LiteOS的中断支持:中断初始化、中断创建、开/关中断、恢复中断、中断使能、中断屏蔽。
  4. Huawei LiteOS的中断机制支持中断共享。

Huawei LiteOS Kernel硬件相关模块—中断运作机制

  1. 保存当前处理机状态信息;
  2. 载入异常或中断处理函数到PC寄存器;
  3. 把控制权转交给处理函数并开始执行;
  4. 当处理函数执行完成时,恢复处理器状态信息;
  5. 从异常或中断中返回到前一个程序执行点。

Huawei LiteOS Kernel IPC通信模块—队列概述

队列又称消息队列,是一种常用于任务间通信的数据结构,实现了接收来自任务或中断的不固定长度的消息,并根据不同的接口选择传递消息是否存放在最近空间。任务能够从队列里面读取消息,当队列中的消息是空时,挂起读取任务;当队列中有新消息时,挂起的读取任务被唤醒并处理新消息。

Huawei LiteOS Kernel IPC通信模块—队列运作原理

  1. 创建队列时,根据用户传入队列长度和消息节点大小来开辟相应的内存空间以供该队列使用,返回队列ID。
  2. 在队列控制块中维护一个消息头节点位置Head和一个消息尾节点位置Tail来表示当前队列中消息存储情况。Head表示队列中被占用消息的起始位置;Tail表示队列中被空闲消息的起始位置;刚创建时Head和Tail均指向队列起始位置。
  3. 写队列时,根据Tail找到被占用消息节点末尾的空闲节点作为数据写入对象。如果Tail已经指向队列尾则采用回卷方式。根据usWritableCnt判断队列是否可以写入,不能对已满(usWritableCnt为0)队列进行写队列操作。
  4. 读队列时,根据Head找到最先写入队列中的消息节点进行读取。如果Head已经指向队列尾则采用回卷方式。根据usReadableCnt判断队列是否有消息读取,对全部空闲(usReadableCnt为0)队列进行读队列操作会引任务挂起。
  5. 删除队列时,根据传入的队列ID寻找到对应的队列,把队列状态置为未使用,释放原队列所占的空间,对应的队列控制头置为初始状态。

Huawei LiteOS Kernel任务同步模块—互斥锁概述

  1. 互斥锁又称互斥型信号量,是一种特殊的二值性信号量,用于实现对共享资源的独占式处理。
  2. 任意时刻互斥锁的状态只有两种,开锁或闭锁。当有任务持有时,互斥锁处于闭锁状态,这个任务获得该互斥锁的所有权。当该任务释放它时,该互斥锁被开锁,任务失去该互斥锁的所有权。当一个任务持有互斥锁时,其他任务将不能再对该互斥锁进行开锁或持有。
  3. 多任务环境下往往存在多个任务竞争同一共享资源的应用场景,互斥锁可被用于对共享资源的保护从而实现独占式访问。另外,互斥锁可以解决信号量存在的优先级翻转问题。

Huawei LiteOS Kernel任务同步模块—信号量概述

  1. 信号量(Semaphore)是一种实现任务间通信的机制,实现任务之间同步或临界资源的互斥访问,常用于协助一组相互竞争的任务来访问临界资源。
  2. 在多任务系统中,信号量功能可用于任务之间需要同步或互斥实现临界资源的保护。

Huawei LiteOS Kernel任务同步模块—信号量运作原理

  1. 信号量初始化,为配置的N个信号量申请内存(N值可以由用户自行配置,受内存限制)并把所有的信号量初始化成未使用,并加入到未使用链表中供系统使用。
  2. 信号量创建,从未使用的信号量链表中获取一个信号量资源,并设定初值。
  3. 信号量申请,若其计数器值大于0,则直接减1返回成功。否则任务阻塞,等待其它任务释放该信号量,等待的超时时间可设定。当任务被一个信号量阻塞时,将该任务挂到信号量等待任务队列的队尾。
  4. 信号量释放,若没有任务等待该信号量,则直接将计数器加1返回。否则唤醒该信号量等待任务队列上的第一个任务。
  5. 信号量删除,将正在使用的信号量置为未使用信号量,并挂回到未使用链表。
  6. 信号量允许多个任务在同一时刻访问同一资源,但会限制同一时刻访问此资源的最大任务数目。访问同一资源的任务数达到该资源的最大数量时,会阻塞其他试图获取该资源的任务,直到有任务释放该信号量。

Huawei LiteOS Kernel时间管理模块—时间管理概述

  1. 时间管理以系统时钟为基础。时间管理提供给应用程序所有和时间有关的服务。
  2. 系统时钟是由定时/计时器产生的输出脉冲触发中断而产生的,一般定义为整数或长整数。输出脉冲的周期叫做一个“时钟滴答”。系统时钟也成为时标或者Tick,一个Tick的时长可以静态配置。
  3. 芯片CPU的计时是以Tick为单位的,Tick与秒之间的对应关系可以配置。

Huawei LiteOS Kernel模块—双向链表

  1. 双向链表是指含有往前和往后两个方向的链表,即每个节点中除存放下一个节点指针外,还增加一个指向其一个节点的指针,其头指针head是唯一确认的。
  2. 从双向链表中的任意一个节点开始,都可以很方便地访问它的前驱节点和后继节点,这种数据结构形式使得双向链表在查找时更加方便,特别是大量数据的遍历。由于双向链表具有对称性,能方便地完成各种插入、删除等操作,但需要注意前后方向的操作。

Huawei LiteOS框架

  1. 互联框架:解决不同协议终端的互联互通,支持自组网;
  2. 传感框架:提供统一的传感器管理、传感算法库和驱动管理;
  3. 安全框架:提供API认证、双向设备认证和加密算法库,提高终端的安全性。

十一、华为HiLink平台

  1. 高性能可靠
  2. 轻量级内核
  3. 集成高效方便
  4. 强大技术支持
  5. 生态互联互通
-------------本文已经结束 ~\(≧▽≦)/~ 感谢您的阅读-------------